home *** CD-ROM | disk | FTP | other *** search
/ Nebula 2 / Nebula Two.iso / SourceCode / Palettes / 3.0JoyStick / JoyStick.m < prev    next >
Text File  |  1995-06-12  |  3KB  |  216 lines

  1. #import <appkit/appkit.h>
  2.  
  3. #import "JoyStick.h"
  4.  
  5. @implementation JoyStick
  6.  
  7. void JS_scroller(DPSTimedEntry teNumber, double now,id userData)
  8. {
  9.     NXPoint mouseLoc;
  10.  
  11.     [[userData window] getMouseLocation:&mouseLoc];
  12.     [userData convertPoint:&mouseLoc fromView:nil];
  13.     [userData setPos:(NXPoint)mouseLoc];
  14.  
  15. }
  16.  
  17. - (float)getYVal:sender
  18. {
  19.     return y*ymax;
  20. }
  21.  
  22. - (float)getXVal:sender
  23. {
  24.     return x*xmax;
  25. }
  26.  
  27. -setXMax:(float)val
  28. {
  29. xmax=2*val;
  30. return self;
  31. }
  32. -setYMax:(float)val
  33. {
  34. ymax=2*val;
  35. return self;
  36. }
  37.  
  38. - (float)yMax
  39. {
  40.     return 0.5*ymax;
  41. }
  42. - (float)xMax
  43. {
  44.     return 0.5*xmax;
  45. }
  46.  
  47. -setTrackTime:(float)val
  48.     {
  49.     tracktime=val;
  50.     return self;
  51.     }
  52. -setFadeTime:(float)val
  53.     {
  54.     fadetime=val;
  55.     return self;
  56.     }
  57. -(float)trackTime
  58.     {
  59.     return tracktime;
  60.     }
  61. -(float)fadeTime
  62.     {
  63.     return fadetime;
  64.     }
  65.  
  66. - drawSelf:(const NXRect *)rects :(int)rectCount
  67. {
  68.     PSsetgray(NX_LTGRAY);
  69.     PSrectfill(-0.55,-0.55,1.1,1.1);
  70.  
  71.     PSsetgray(.85);
  72.     PSarc(0,0,.55,0,360);
  73.     PSfill();   
  74.     
  75.     PSsethsbcolor(0,0,0);
  76.     PSarc(0,0,.55,0,360);
  77.     PSsetlinewidth(.005);
  78.     PSstroke();
  79.     
  80.     PSsethsbcolor(1,1,0);
  81.     PSsetlinewidth(0.005);
  82.     PSmoveto(0,-1.1);
  83.     PSlineto(0,1.1);
  84.     PSmoveto(-1.1,0);
  85.     PSlineto(1.1,0);
  86.     PSstroke();
  87.         
  88.     PSsetgray(.6);
  89.     PSmoveto(0,0);
  90.     PSarc(0,0,.15,0,360);
  91.     PSfill();
  92.     
  93.     PSsetgray(.3);
  94.     PSmoveto(0,0);
  95.     PSarc(0,0,.05,0,360);
  96.     PSfill();
  97.     
  98.     PSnewpath();
  99.     PSsetgray(.3);
  100.     PSmoveto(0,0);
  101.     PSlineto(x,y);
  102.     PSsetlinewidth(.07);
  103.     PSstroke();
  104.  
  105.     PSsethsbcolor(1,1,.7);
  106.     PSarc(x, y, .15,0,360);
  107.     PSfill();
  108.         
  109.     return self;
  110. }
  111.  
  112. - initFrame:(const NXRect *)frameRect
  113. {    
  114.     [super initFrame:frameRect];
  115.     
  116.     [self setDrawSize:(NXCoord)1.1:(NXCoord)1.1];
  117.     [self setDrawOrigin:-(float)0.55 :-(float)0.55];
  118.  
  119.     timer = (DPSTimedEntry)-1;
  120.     tracktime=0.1;
  121.     fadetime=0.7;
  122.     track=NO;
  123.     x=y=0;
  124.     xmax=1;
  125.     ymax=1;
  126.     
  127.     return self;
  128.  }
  129.  
  130. - sizeTo:(NXCoord)width:(NXCoord)height
  131. {
  132. [super sizeTo:width :height];
  133. [self setDrawSize:(NXCoord)1.1:(NXCoord)1.1];
  134. [self setDrawOrigin:-(float)0.55 :-(float)0.55];
  135. return self;
  136. }
  137.  
  138. -free
  139. {
  140. if(timer !=  (DPSTimedEntry)-1)
  141.     DPSRemoveTimedEntry(timer);
  142. [super free];
  143. return self;
  144. }
  145. - setPos:(NXPoint)mouseLoc
  146. {
  147. if(track==YES)
  148.     {
  149.     x=    mouseLoc.x<0.5    ? mouseLoc.x     :0.5 ;
  150.     x=    x>-0.5            ? x                 :-0.5;
  151.     y=    mouseLoc.y<0.5    ? mouseLoc.y     : 0.5 ;
  152.     y=    y>-0.5            ? y                 :-0.5;
  153.     }
  154. else
  155.     {
  156.     x *=fadetime;
  157.     y *=fadetime;
  158.     if (x*x<0.0001 && y*y<0.0001 && timer != (DPSTimedEntry)-1)
  159.     {
  160.     DPSRemoveTimedEntry(timer);
  161.     timer=(DPSTimedEntry) -1;
  162.     x=y=0;
  163.     }
  164.     }
  165.     [self display];
  166.     return self;
  167. }
  168.  
  169.  
  170. - (BOOL)acceptsFirstMouse
  171. {
  172.     return YES;
  173. }
  174.  
  175. - mouseDown:(NXEvent *)theEvent
  176. {
  177.     track=YES;
  178.     if(timer== (DPSTimedEntry)-1)
  179.     timer=DPSAddTimedEntry(tracktime, (DPSTimedEntryProc)JS_scroller, (void *)self, NX_BASETHRESHOLD);
  180.     return(self);
  181. }
  182.  
  183. - mouseUp:(NXEvent *)theEvent
  184. {
  185.     track=NO;
  186.     return(self);
  187. }
  188.  
  189. - write:(NXTypedStream *)stream
  190. {
  191.     [super write:stream];
  192.     NXWriteTypes(stream,"ffff",&xmax,&ymax,&tracktime,&fadetime);
  193.     return self;
  194. }
  195.     
  196. - read:(NXTypedStream *)stream
  197.     {
  198.     [super read:stream];
  199.     NXReadTypes(stream,"ffff",&xmax,&ymax,&tracktime,&fadetime);
  200.     x=y=0;
  201.     timer= (DPSTimedEntry)-1;
  202.     track=NO;
  203.     return self;
  204.     }
  205.     
  206.  
  207.  
  208. - (const char *) getInspectorClassName
  209.     {
  210.     return "JoyStickInspector";
  211.     }
  212.  
  213.  
  214.  
  215. @end
  216.